sample\
12 sample_keybdmod.hsp
#include "hsp3dish.as"
#include "mod_layerbutton-keybd.hsp"
#include "d3m.hsp" ; FPS計測用
screen 0, 640,480
title "mod_layerbutton-keybd サンプル"
// HSP3Dish.js用データフォルダ設定
info_os = sysinfo(0)
if instr(info_os,0,"Emscripten")>=0 : mm_dir="" : else : mm_dir="data/"
// 画像読み込み
celload mm_dir+"keybd.png", -1
cel_keybd = stat : celdiv cel_keybd,32,32, 16,16
celload mm_dir+"backsp.png", -1
cel_backsp = stat : celdiv cel_backsp,32,32, 16,16
gsel 0
inputVar = "サンプルもじ" ; inputの変数
// 初期画面作成
gosub *setup_input
// 表示ループ
repeat
redraw 0 :color 255,255,255: boxf: color: pos 0,0: font msgothic,17
mes "fps = " + d3getfps()
redraw 1
await 1000/60
loop
stop
// layerbutton Group ID
#const ID_INPUT_DUMMY 0
#const ID_BUTTON_KEYBOARD_CREATE 1
#const ID_BLACK_BACKGROUND 10
#const ID_KEYBOARD_BACK 11
#const ID_KEYBOARD 100
*create_keyboard
// キーボード作成
pos 10,230
out_keybd = inputVar
ScKeyboard ginfo_sx-20,200, out_keybd,16, ID_KEYBOARD, 30,10,5, 0,5,5, -1
ScKeybd_color $FEFEFE,$B8D7F1,$0266D8,$D0D0D0
Sckeybd_cursor ; cursorキー有り設定
ScKeybd_onEvent *on_keybd
// キーボード入力補助画面(黒背景と入力中文字列などの表示)
pos 0,0
layerbutton ginfo_sx,ginfo_sy, 0,ID_BLACK_BACKGROUND, 50,,,30 {
laybtn_settings 1,1,0 ; 表示のみ (設定 : キー/マウス操作無効)
if lparam == objlayer_cmddraw {
font msgothic,20,1 : color 255,255,255
laybtn_ezbox $BB000000,,,,,,,,,0 ; 半透明黒で画面全体を覆う(角丸なし長方形)
// 入力中文字の表示
if layerbtn_stat < LAYBTN_SHOW_OUT { ; LAYBTN_SHOW_OUT, LAYBTN_COMPLETE 時には描画しない(フェードできないため)
pos 10,10 : color 255,255,255
mes "文字列を入力してください"
Sckeybd_cursor -2 ; カーソル位置取得
if stat != cursor_pos : cursor_ipa = iparam ; カーソルの点滅ループを初期化する
cursor_pos = stat
split_char@modlaybtn_keybd out_keybd, split_input ; 一文字ずつ分ける (対応:shift-jis,utf8)
num = stat
pos 110,133
repeat num + 1
if cnt == cursor_pos { ; カーソル描画
if (iparam-cursor_ipa)/40\2 : color 35,88,126 : else : color 73,175,255
boxf ginfo_cx-2,ginfo_cy-4, ginfo_cx, 155 : color 255,255,255
}
if cnt == num : break
mes ""+split_input(cnt), 1 : pos ginfo_cx+3 ; 文字列描画
loop
boxf 100,155, 540,155+2 ; 下線描画
font msgothic,14
pos -ginfo_sx,-ginfo_sy : mes ""+num+"/16" ; ginfo_mesx取得用
pos 540-ginfo_mesx,162 : mes ""+num+"/16"
}
}
return
}
// キーボード後ろ側の明るい背景(装飾)
pos 0, 210
layerbutton ginfo_sx,ginfo_sy-190, 0,ID_KEYBOARD_BACK, 50,,,30 {
laybtn_settings 1,1,0 ; 表示のみ (設定 : キー/マウス操作無効)
if lparam == objlayer_cmddraw {
laybtn_ezbox $EEEFEFEF,,,,,,,,,10 ; アール(R)指定
}
return
}
return
// キーボード描画割り込み
*on_keybd
// 一文字削除キーを画像に差し替え
if refstr == "一字削" {
laybtn_ezcel cel_backsp,0,,,,,,,,,1,1 ; celputだと、もしSHOW_OUTがあったときフェードが難しいので
return -1
}
if refstr == "OK" {
if (layerbtn_stat & LAYBTN_SHOW_OUT)!=0 && layerbtn_cnt == 0 {
logmes "OK!" ; OKを押した瞬間に何かしたかったらココ
}
}
// キーボードが非表示になった(削除された)
if layerbtn_stat == LAYBTN_GROUP_DELETED {
// キーボード画面の黒背景等を削除
laybtn_hide ID_BLACK_BACKGROUND
laybtn_hide ID_KEYBOARD_BACK
laybtn_hide ID_INPUT_DUMMY
// キーボード表示ボタンを有効に戻す
laybtn_enable ID_BUTTON_KEYBOARD_CREATE, 1
// 削除していたinputオブジェクトを再作成
pos 100,50 : objsize 300,50
inputVar = out_keybd
input inputVar : id_input = stat
}
return
// 初期画面作成
*setup_input
// inputオブジェクト作成
pos 100,50 : objsize 300,50
input inputVar : id_input = stat
// キーボード表示ボタン作成
pos 420,50
layerbutton 90,50, 0, ID_BUTTON_KEYBOARD_CREATE, 0,10,10, 0,5,5 {
laybtn_settings 1,0,1 ; 設定 : キー入力無効、押しても消えない
if lparam == objlayer_cmddraw {
laybtn_ezbox $0266D8, $3385E6, $014C9C ; 青い背景描画
pos objlayer_axis_x+objlayer_size_x/2,objlayer_axis_y+objlayer_size_y/2
celput cel_keybd,0 ; キーボード画像描画
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED { ; ボタンが選択されたとき
// キーボード表示ボタンを無効にする
laybtn_enable ID_BUTTON_KEYBOARD_CREATE, 0
// いったんinputオブジェクトは消す (キーボード削除時に再作成)
clrobj id_input,id_input
// inputオブジェクトのダミー描画オブジェクトを作る (キーボード入力中、inputをいったん消す代わり)
pos 100, 50
layerbutton 300,50, 0, ID_INPUT_DUMMY {
laybtn_settings 1,1,0 ; 表示のみ (設定 : キー/マウス操作無効)
if lparam == objlayer_cmddraw : color 200,200,200 : boxf objlayer_axis_x,objlayer_axis_y, objlayer_axis_x2,objlayer_axis_y2
return
}
// キーボードコントローラを作成
gosub *create_keyboard
}
}
return
}
return